/*******************************************************************************
 * Classe BombeSonore : classe créant la bombe sonore, bombe explosant selon
 *                      le bruit recueilli par le microphone
 ******************************************************************************/
package Armes;

import prjintwg.ProjectileSimple;
import java.awt.*;
import ElementsDeJeu.MessageSpecial;
import ElementsDeJeu.Microphone;
import ElementsDeJeu.Personnage;
import prjintwg.PnlJeu;

/**
 *
 * @author W&G
 */
public class BombeSonore extends ProjectileSimple {

    Microphone microphone = new Microphone(pnlJeu, 0);//Microphone utilisé pour recueillir et jouer le son
    private Color couleur = new Color(100, 100, 100);//Couleur du projectile

    /**
     * Constructeur dela bombe sonore
     * @param positionX position x de la bombe sonore
     * @param positionY position y de la bombe sonore
     * @param pnlJeu panneau du jeu
     */
    public BombeSonore(int positionX, int positionY, PnlJeu pnlJeu) {
        super(positionX, positionY, pnlJeu);
        this.puissance = 0.7;
    }

   /**
     * Retourne le volume et définit le rayon d'explosion
     * @return volume enregistré
     */
    @Override
    public int getVolume() {
        int volume = microphone.getVolume();
        rayonExplosion = 5 + volume / 4;
        return volume;

    }
/**
 * Inflige des dommages au personnage lors de l'explosion a distance de la bombe
 * @param personnage qui subit les dommages
 * @return dommages subit par le personnage
 */
    @Override
    public int endommager(Personnage personnage) {
        int volume = microphone.getVolume();
        double distance = Math.sqrt(Math.pow(this.positionX - personnage.getPosX(), 2) + Math.pow(this.positionY - personnage.getPosY(), 2));
        int dommages = (int) (Math.pow(volume, 2) * 70 / Math.pow(distance + 50, 1.5));
        return dommages;
    }
    /**
     * Capture du son et mise de la barre de volume en fonction
     */
    @Override
    public void actionSpeciale1() {
        pnlJeu.setBarreVolume(true);
        microphone.captureAudio();
        while (microphone.getCaptureThread().isAlive()) {
        }
    }
    /**
     * Ne montre pas le message special si ne touche personne
     */
            @Override
    protected void personneTouche(){
                            try {
                        mS = new MessageSpecial("Fail.PNG");
                        mS.setVisible(false);
                    } catch (Exception e) {
                        System.out.println("Erreur de chargement du message spécial");
                        System.out.println(e);
                    }
    }
/**
 *  Joue le son capturé
 */
    @Override
    public void actionSpeciale2() {
        microphone.playAudio();
    }

    @Override
    public void paintComponent(Graphics g) {//Dessine la bombe
        g.setColor(couleur);
        g.fillOval(positionX, TAILLEFENETRE - this.positionY, 10, 10);
    }
}
